//6．编写一个函数接受3个参数：一个数组名（内含已排序的整数）、该数组的元素个数和待查找的整数。
//如果待查找的整数在数组中，那么该函数返回1；如果该数不在数组中，该函数则返回0。用二分查找法实现。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int contain(int ar[], int size, int val);

#define BIG_LEN 65535

int main(void) {
    int ar1[2] = {2, 3};
    assert(contain(ar1, 2, 3));
    assert(!contain(ar1, 2, 4));
    int ar2[BIG_LEN];
    for (int i = 0; i < BIG_LEN; ++i) {
        ar2[i] = i + 1;
    }
    assert(contain(ar2,BIG_LEN,11));
    assert(contain(ar2,BIG_LEN,1));
    return 0;
}

int contain(int ar[], int size, int val) {
    int mini = 0;
    int maxi = size - 1;
    while (mini<=maxi) {
        int midi = mini+(maxi-mini)/2;
        if (val == ar[midi])
            return 1;
        else if (val < ar[midi]) {
            maxi = midi-1;
        } else {
            mini = midi+1;
        }
    }
    return 0;
}